﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Rect = System.Drawing.Rectangle;
namespace ttbit.math
{
    public struct Border
    {
        public uint X1;
        public uint X2;
        public uint Y1;
        public uint Y2;

        public static Border Single(uint b)
        {
            return new Border()
            {
                X1 = b,
                X2 = b,
                Y1 = b,
                Y2 = b
            };
        }
        public static Border Create(uint x1, uint x2, uint y1, uint y2)
        {
            return new Border()
            {
                X1 = x1,
                X2 = x2,
                Y1 = y1,
                Y2 = y2
            };
        }
    }

    //UIRect的价值就是一个ref 的Rect，   可以用StrongBox<Rectangle>替代
    //public class UIRect
    //{

    //    public UIRect(int x = 0, int y = 0, int width = 0, int height = 1)
    //    {
    //        this.x = x;
    //        this.y = y;
    //        this.width = width;
    //        this.height = height;
    //    }
    //    public int x;
    //    public int y;
    //    public int width;
    //    public int height;
    //    public int x2
    //    {
    //        get
    //        {
    //            return x + width;
    //        }
    //    }
    //    public int y2
    //    {
    //        get
    //        {
    //            return y + height;
    //        }
    //    }

    //    public void Set(int x, int y, int w, int h)
    //    {
    //        this.x = x;
    //        this.y = y;
    //        this.width = w;
    //        this.height = h;
    //    }
    //    public void Set(UIRect r)
    //    {
    //        this.x = r.x;
    //        this.y = r.y;
    //        this.width = r.width;
    //        this.height = r.height;
    //    }
    //    public void Set(Rect r)
    //    {
    //        this.x = r.X;
    //        this.y = r.Y;
    //        this.width = r.Width;
    //        this.height = r.Height;
    //    }
    //    public void SetPos(int x, int y)
    //    {
    //        this.x = x;
    //        this.y = y;
    //    }
    //    public void SetSize(int w, int h)
    //    {
    //        this.width = w;
    //        this.height = h;
    //    }
    //    public Rect rect
    //    {
    //        get
    //        {
    //            return new Rect(x, y, width, height);
    //        }
    //        set
    //        {
    //            this.x = value.X;
    //            this.y = value.Y;
    //            this.width = value.Width;
    //            this.height = value.Height;
    //        }
    //    }
    //    public bool Contain(int x, int y)
    //    {
    //        return x >= this.x && x < this.x2 && y >= this.y && y < this.y2;
    //    }

    //}


    //public struct Rect
    //{
    //    public Rect(int x = 0, int y = 0, int width = 0, int height = 1)
    //    {
    //        this.x = x;
    //        this.y = y;
    //        this.width = width;
    //        this.height = height;
    //    }
    //    public int x;
    //    public int y;
    //    public int width;
    //    public int height;
    //    public int x2
    //    {
    //        get
    //        {
    //            return x + width;
    //        }
    //    }
    //    public int y2
    //    {
    //        get
    //        {
    //            return y + height;
    //        }
    //    }

    //    public Rect Union(Rect rect)
    //    {
    //        var x1 = Math.Max(this.x, rect.x);
    //        var x2 = Math.Min(this.x + this.width, rect.x + rect.width);
    //        var y1 = Math.Max(this.y, rect.y);
    //        var y2 = Math.Min(this.y + this.height, rect.y + rect.height);
    //        return new Rect(x1, y1, x2 - x1, y2 - y1);
    //    }
    //    public bool Contained(Rect b)
    //    {
    //        return x >= b.x && y >= b.y
    //         && x2 <= b.x2
    //         && y2 <= b.y2;
    //    }
    //    public static bool IsContainedIn(Rect a, Rect b)
    //    {
    //        return a.x >= b.x && a.y >= b.y
    //            && a.x2 <= b.x2
    //            && a.y2 <= b.y2;
    //    }
    //}
    //public struct RectF
    //{
    //    public RectF(float x = 0, float y = 0, float width = 0, float height = 1)
    //    {
    //        this.x = x;
    //        this.y = y;
    //        this.width = width;
    //        this.height = height;
    //    }
    //    public float x;
    //    public float y;
    //    public float width;
    //    public float height;
    //    public float x2
    //    {
    //        get
    //        {
    //            return x + width;
    //        }
    //    }
    //    public float y2
    //    {
    //        get
    //        {
    //            return y + height;
    //        }
    //    }

    //}
}
